给定一个字符串s,字符串s只包含以下三种字符: (,*,),请你判断 s是不是一个合法的括号字符串。合法括号字符串有如下规则:
1.左括号'('必须有对应的右括号')'
2.右括号')'必须有对应的左括号'('
3.左括号必须在对应的右括号前面
4.*可以视为单个左括号,也可以视为单个右括号,或者视为一个空字符
5.空字符串也视为合法的括号字符串
数据范围:
"()()"
true
"((*)"
true
"(*)"
true
"(((*)"
false
class Solution: def isValidString(self , s: str) -> bool: l = [] star = [] for i in range(len(s)): if s[i] == '(': l.append(i) elif s[i] == '*': star.append(i) elif s[i] == ')': if l: l.pop() elif star: star.pop() else: return False if len(l) > len(star): return False i = j = 0 while l and j < len(star): if l[i] < star[j]: l.pop(i) star.pop(j) else: j += 1 if l == []: return True else: return False
class Solution: def isValidString(self , s: str) -> bool: if s[0] == ')': return False dic = {')': '(', '*': '*'} res,res2,res3 = [],[],[] start = 0 for i in range(len(s)): if s[i] not in dic.keys(): res.append(s[i]) res2.append(i) else: if s[i] == "*": start += 1 res3.append(i) elif len(res) > 0: res.pop() res2.pop() if len(res) == 0: return True elif len(res) <= start: while res2: if res2[-1] > res3[-1]: return False else: res2.pop() res3.pop() return True else: return False